package br.com.monise.view;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.SystemColor;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.UnsupportedLookAndFeelException;

import br.com.monise.model.Parceiro;
import br.com.monise.model.Usuario;
import javax.swing.ImageIcon;
import javax.swing.JSeparator;

public class TelaInicial extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static TelaInicial frame;
	JDesktopPane plPrincipal;
	private static Usuario usuario;
	private static Parceiro parceiro;

	private static JMenu mnAdiministrador;
	private static JMenuItem mntmAdicionarCaracteristicas;
	private static JMenuItem mntmCalcularSimilaridade;
	private static JMenu mnCadastro;
	private static JMenuItem mntmAdicionarAdministrador;
	private static JMenuItem mntmNovoParceiro;
	private static JMenuItem mntmUsurio;
	private static JMenuItem mntmEditarParceiro;
	private static JMenuItem mntmListaDeParceiros;
	private static JMenu mnAvaliao;
	private static JMenuItem mntmArtigo;
	private static JMenuItem mntmArtigosLidos;

	public static TelaInicial getInstancia(Usuario usuario) {
		if (frame == null) {
			frame = new TelaInicial(usuario, null);
		}
		return frame;
	}
	
	public static TelaInicial getInstancia(Parceiro parceiro) {
		if (frame == null) {
			frame = new TelaInicial(null,parceiro);
		}
		return frame;
	}

	public static TelaInicial getInstancia() {
		if (frame == null) {
			frame = new TelaInicial(null, null);
		}
		return frame;
	}

	public static Usuario getUsuario() {
		return getUsuario();
	}

	/*
	 * public static JPanel getPanelPrincipal() { return
	 * getInstancia().plPrincipal; }
	 */

	public static JDesktopPane getPanelPrincipal() {
		return getInstancia().plPrincipal;
	}

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {

		for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager
				.getInstalledLookAndFeels()) {
			if ("Nimbus".equals(info.getName())) {
				try {
					javax.swing.UIManager.setLookAndFeel(info.getClassName());
				} catch (ClassNotFoundException ex) {
					Logger.getLogger(TelaInicial.class.getName()).log(
							Level.FINE, null, ex);
				} catch (InstantiationException ex) {
					Logger.getLogger(TelaInicial.class.getName()).log(
							Level.FINE, null, ex);
				} catch (IllegalAccessException ex) {
					Logger.getLogger(TelaInicial.class.getName()).log(
							Level.FINE, null, ex);
				} catch (UnsupportedLookAndFeelException ex) {
					Logger.getLogger(TelaInicial.class.getName()).log(
							Level.FINE, null, ex);
				}
				break;
			}
		}

		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {

					getInstancia();
					frame.setVisible(true);

					FrameLogin login = new FrameLogin();
					TelaInicial.getInstancia().AbrirTela(login);
					login.setVisible(true);

				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public TelaInicial(Usuario usuario, Parceiro parceiro) {
		setIconImage(Toolkit.getDefaultToolkit().getImage(TelaInicial.class.getResource("/br/com/monise/imagens/iconeUsuario.png")));

		TelaInicial.usuario = usuario;
		TelaInicial.parceiro = parceiro;

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 1374, 723);
		this.setLocationRelativeTo(null);
		// this.setExtendedState(Frame.MAXIMIZED_VERT);

		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);

		mnAdiministrador = new JMenu("Adiministrador");
		menuBar.add(mnAdiministrador);

		mntmAdicionarCaracteristicas = new JMenuItem(
				"Adicionar caracteristicas");
		mntmAdicionarCaracteristicas.setIcon(new ImageIcon(TelaInicial.class.getResource("/br/com/monise/imagens/caracteristica.png")));
		mntmAdicionarCaracteristicas
				.addActionListener(new AbrirNovasCaracteristicas());
		mnAdiministrador.add(mntmAdicionarCaracteristicas);

		mntmCalcularSimilaridade = new JMenuItem(
				"Calcular similaridade");
		mntmCalcularSimilaridade.setIcon(new ImageIcon(TelaInicial.class.getResource("/br/com/monise/imagens/icon.png")));
		mntmCalcularSimilaridade
				.addActionListener(new AbrirCalcularSimilaridade());
		mnAdiministrador.add(mntmCalcularSimilaridade);

		mnCadastro = new JMenu("Cadastro");

		menuBar.add(mnCadastro);
		
		mntmAdicionarAdministrador = new JMenuItem("Adicionar Administrador");
		mntmAdicionarAdministrador.setIcon(new ImageIcon(TelaInicial.class.getResource("/br/com/monise/imagens/icone_usuarios.gif")));
		mntmAdicionarAdministrador.addActionListener(new AdicionarAdminstrador());
		mnCadastro.add(mntmAdicionarAdministrador);
		
		mntmNovoParceiro = new JMenuItem("Adicionar Parceiro");
		mntmNovoParceiro.setIcon(new ImageIcon(TelaInicial.class.getResource("/br/com/monise/imagens/icone_usuario_parceiro.png")));
		mntmNovoParceiro.addActionListener(new AbrirCadastroParceiro());
		mnCadastro.add(mntmNovoParceiro);

		mntmUsurio = new JMenuItem("Editar Adminsitrador");
		mntmUsurio.setIcon(new ImageIcon(TelaInicial.class.getResource("/br/com/monise/imagens/icone_usuarios.gif")));
		mntmUsurio.addActionListener(new EditarAdminstrador());
		
		JSeparator separator = new JSeparator();
		mnCadastro.add(separator);
		mnCadastro.add(mntmUsurio);
		
		mntmEditarParceiro = new JMenuItem("Editar Parceiro");
		mntmEditarParceiro.setIcon(new ImageIcon(TelaInicial.class.getResource("/br/com/monise/imagens/icone_usuario_parceiro.png")));
		mntmEditarParceiro.addActionListener(new EditarParceiro());
		mnCadastro.add(mntmEditarParceiro);
		
		mntmListaDeParceiros = new JMenuItem("Lista de parceiros");
		mntmListaDeParceiros.setIcon(new ImageIcon(TelaInicial.class.getResource("/br/com/monise/imagens/iconeUsuario.png")));
		mntmListaDeParceiros.addActionListener(new AbrirListaParceiros());
		
		JSeparator separator_1 = new JSeparator();
		mnCadastro.add(separator_1);
		mnCadastro.add(mntmListaDeParceiros);

		mnAvaliao = new JMenu("Artigos");
		menuBar.add(mnAvaliao);

		mntmArtigo = new JMenuItem("Avaliar Artigo");
		mntmArtigo.setIcon(new ImageIcon(TelaInicial.class.getResource("/br/com/monise/imagens/icone_papel.jpg")));
		mntmArtigo.addActionListener(new AbrirAvaliacaoArtigo());
		mnAvaliao.add(mntmArtigo);

		mntmArtigosLidos = new JMenuItem("Artigos lidos");
		mntmArtigosLidos.setIcon(new ImageIcon(TelaInicial.class.getResource("/br/com/monise/imagens/artigo.jpg")));
		mntmArtigosLidos.addActionListener(new AbrirArtigosLidos());
		mnAvaliao.add(mntmArtigosLidos);

		setVisible(true);

		setResizable(true);

		plPrincipal = new JDesktopPane();
		plPrincipal.setBackground(SystemColor.activeCaption);
		getContentPane().add(plPrincipal, BorderLayout.CENTER);
	}

	public void AbrirTela(JInternalFrame tela) {
		getInstancia().plPrincipal.add(tela);
		int lDesk = plPrincipal.getWidth();
		int aDesk = plPrincipal.getHeight();
		int lIFrame = tela.getWidth();
		int aIFrame = tela.getHeight();

		tela.setLocation(lDesk / 2 - lIFrame / 2, aDesk / 2 - aIFrame / 2);
		tela.setVisible(true);
	}
	
	public static void permissao(){
		if(usuario == null && parceiro != null){
		    mnAdiministrador.setEnabled(false);
			mntmAdicionarCaracteristicas.setEnabled(false);
			mntmCalcularSimilaridade.setEnabled(false);
			mnCadastro.setEnabled(true);
			mntmAdicionarAdministrador.setEnabled(false);
			mntmNovoParceiro.setEnabled(false);
			mntmUsurio.setEnabled(false);
			mntmEditarParceiro.setEnabled(true);
			mntmListaDeParceiros.setEnabled(false);
			mnAvaliao.setEnabled(true);
			mntmArtigo.setEnabled(true);
			mntmArtigosLidos.setEnabled(true);
		} 
		
		if(usuario != null && parceiro == null){
		    mnAdiministrador.setEnabled(true);
			mntmAdicionarCaracteristicas.setEnabled(true);
			mntmCalcularSimilaridade.setEnabled(true);
			mnCadastro.setEnabled(true);
			mntmAdicionarAdministrador.setEnabled(true);
			mntmNovoParceiro.setEnabled(true);
			mntmUsurio.setEnabled(true);
			mntmEditarParceiro.setEnabled(true);
			mntmListaDeParceiros.setEnabled(true);
			mnAvaliao.setEnabled(true);
			mntmArtigo.setEnabled(true);
			mntmArtigosLidos.setEnabled(true);
		}
		
	}

	private class AbrirAvaliacaoArtigo implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			FrameAvaliacaoArtigo tela = new FrameAvaliacaoArtigo(parceiro, usuario);
			AbrirTela(tela);
		}
	}

	private class AbrirArtigosLidos implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			FrameArtigosLidos tela = new FrameArtigosLidos(parceiro);
			AbrirTela(tela);
		}
	}

	private class AbrirCalcularSimilaridade implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			FrameSimilaridade tela = new FrameSimilaridade(usuario);
			AbrirTela(tela);
		}
	}

	private class AbrirNovasCaracteristicas implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			FrameNovaCaracteristica tela = new FrameNovaCaracteristica();
			AbrirTela(tela);
		}
	}
	
	private class AbrirCadastroParceiro implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			FrameCadastroUsuarioParceiro tela = new FrameCadastroUsuarioParceiro();
			AbrirTela(tela);
		}
	}
	
	private class AbrirListaParceiros implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			FrameCaracteristicasParceiros tela = new FrameCaracteristicasParceiros();
			AbrirTela(tela);
		}
	}
	
	private class AdicionarAdminstrador implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			FrameCadastroUsuarioAdministrador tela = new FrameCadastroUsuarioAdministrador();
			AbrirTela(tela);
		}
	}
	
	private class EditarAdminstrador implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			FrameEditarUsuarioAdministrador tela = new FrameEditarUsuarioAdministrador(usuario);
			AbrirTela(tela);
		}
	}
	
	private class EditarParceiro implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			FrameEditarUsuarioParceiro tela = new FrameEditarUsuarioParceiro(parceiro);
			AbrirTela(tela);
		}
	}

	public static void setUsuario(Usuario usuario1) {
		usuario = usuario1;
	}

	public static Parceiro getParceiro() {
		return parceiro;
	}

	public static void setParceiro(Parceiro parceiro) {
		TelaInicial.parceiro = parceiro;
	}
}
